/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package prog2compiladores;

import java.io.BufferedReader;
import java.io.FileReader;
import java.util.ArrayList;
import javax.swing.JFrame;

public class LeerArchivos extends JFrame {

    static ArrayList<TablaSimbolos> tabla = new ArrayList<>();
    public static ArrayList<String> nombres = new ArrayList<>();
    public static ArrayList<String> tipos = new ArrayList<>();
    String ruta = "loki2";

    public String getRuta() {
        return ruta;
    }

    public void setRuta(String ruta) {
        this.ruta = ruta;
    }

    public static void main(String[] args) {


        Examinar ventana = new Examinar();
        LeerArchivos ruta = new LeerArchivos();



        ventana.setVisible(true);
        while (ventana.getRuta().equals("loki")) {



            ventana.getjTextField1().toString();


        }

        ventana.setVisible(false);
        try {
            TablaSimbolos t = null;
            String rutaen = ventana.getRuta();
//            System.out.println(rutaen);
            //File f = new File(rutaen);
            //
            FileReader fr = new FileReader(rutaen);
            BufferedReader bf = new BufferedReader(fr);
            int cadena = fr.read();
            char letra = ' ';
            char estado = 0;
            long lNumeroLineas = 1;

//            System.out.println(cadena);
            System.out.println("Los tokens son:");
            while (cadena != -1) {
                String token = "";

//                System.out.print((char) cadena);
//                System.out.println("Entro" + cadena);
                if (cadena < 91 && cadena > 64 || cadena < 123 && cadena > 96 || cadena == 38 || cadena == 33 || cadena == 47 || cadena == 61 || cadena == 36) {
//                    System.out.println("Entrooo");
                    if (cadena < 91 && cadena > 64 || cadena < 123 && cadena > 96) {
                        letra = (char) cadena;
                        estado = 'l';
//                        System.out.println("Entro2");
                    } else if (cadena == 33) {
                        estado = 'n';

                    } else if (cadena == 38 || cadena == 36 || cadena == 47) {
                        estado = 's';
                    } else if (cadena == 61) {
                        estado = 'i';
                    }


                } else if (cadena == 10) {
                    lNumeroLineas++;
                } else if (cadena == 32 || cadena == 13 || cadena == 10) {
                    estado = 'z';
                } else {
                    System.out.println("****Error****    --->  " + (char) cadena);
                    System.out.println("Linea: " + lNumeroLineas);
                    break;
                }

                switch (estado) {

                    case 'l':
//                        System.out.println("Entro sw");
                        // token = letra + "";
                        while (cadena < 91 && cadena > 64 || cadena < 123 && cadena > 96) {
//                            System.out.println("while");
                            token = token + letra;
                            if (token.equals("true") || token.equals("false")) {
                                t = new TablaSimbolos(token, "Palabra reservada");

                            } else {
                                t = new TablaSimbolos(token, "Identificador");

                            }



                            cadena = bf.read();
                            letra = (char) cadena;


                        }
                        tabla.add(t);
//                        System.out.println(letra);
                        if ((letra) == ' ' || cadena == 13) {
//                            System.out.println("errr" + token);
                        }
                        System.out.println(token);
                        break;
                    case 'z':
//                        System.out.println("Hubo espacio");
                        cadena = bf.read();
                        letra = (char) cadena;
                        break;
                    case 'n':
                        letra = (char) cadena;
                        token = token + letra;

                        cadena = bf.read();
                        if (cadena != -1) {
                            if (cadena == 38 || cadena == 47 || cadena == 61 || cadena == 36) {
                                token = token + cadena;
                                // System.out.println(token);
                                //t = new TablaSimbolos(token, "Operador");
                                //tabla.add(t);

                                cadena = bf.read();
                                System.out.println(token);
                            } else if (cadena == 13 || cadena == 32) {
                                //t = new TablaSimbolos(token, "Operador");
                                //tabla.add(t);
                                System.out.println(token);
                                cadena = bf.read();
                            }
                        } else {
                            System.out.println(token);
                        }
                        break;
                    case 's':
                        token = token + (char) cadena;
                        //t = new TablaSimbolos(token, "Operador");
                        //tabla.add(t);
                        System.out.println(token);
                        cadena = bf.read();
                        break;
                    case 'i':
                        token = token + (char) cadena;
                        //t = new TablaSimbolos(token, "Operador");
                        //tabla.add(t);
                        System.out.println(token);
                        cadena = bf.read();
                        break;
                    default:
                        System.out.println("Error");
                        break;
                }
                //



            }
            bf.close();
//            System.out.println("");

            int j;
            for (int i = 0; i < tabla.size(); i++) {
                //System.out.println("Los de i");
                //System.out.println(tabla.get(i).nombre+i);
                for (j = i + 1; j < tabla.size(); j++) {
                    //System.out.println("Los de j");

                    //System.out.println(tabla.get(j).nombre);
                    if (tabla.get(i).nombre.equals(tabla.get(j).nombre)) {
                        // System.out.println(tabla.get(j).nombre + j);
                        tabla.remove(j);
                        j--;

                    }





                }

            }
//            System.out.println("****Tabla de Simbolos*****");
//            System.out.println("--Nombre--      --Tipo--");
//
//            for (int i = 0; i < tabla.size(); i++) {
//                System.out.println("   " + tabla.get(i).getNombre() + "    " + tabla.get(i).tipo);
//
//            }






            String nombre;
            String tipo;

            for (int i = 0; i < tabla.size(); i++) {
                nombre = tabla.get(i).nombre;
                tipo = tabla.get(i).tipo;
                nombres.add(nombre);
                tipos.add(tipo);

            }

            new Mostrar(tabla.size(), nombres, tipos);

        } catch (Exception e) {
            System.out.println("error   " + e.getMessage());

        }

    }

    public LeerArchivos() {
    }
}
